package com.xbongbong.saas.service;

import com.xbongbong.paas.domain.entity.PaasAppEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.pro.appmodule.pojo.dto.AppModuleDetailDTO;
import com.xbongbong.pro.appmodule.pojo.dto.AppModuleListDTO;
import com.xbongbong.pro.appmodule.pojo.dto.AppModuleOpenDTO;
import com.xbongbong.pro.appmodule.pojo.dto.AppModuleSaveDTO;
import com.xbongbong.pro.appmodule.pojo.dto.SendSMSDTO;
import com.xbongbong.pro.appmodule.pojo.vo.AppModuleDetailVO;
import com.xbongbong.pro.appmodule.pojo.vo.AppModuleDisenableListVO;
import com.xbongbong.pro.appmodule.pojo.vo.AppModuleHotVO;
import com.xbongbong.pro.appmodule.pojo.vo.AppModuleListVO;
import com.xbongbong.pro.appmodule.pojo.vo.AppModuleOpenVO;
import com.xbongbong.pro.appmodule.pojo.vo.AppModuleSaveVO;
import com.xbongbong.pro.appmodule.pojo.vo.AppRemindVO;
import com.xbongbong.pro.esign.pojo.dto.EsignAuthUrlDTO;
import com.xbongbong.pro.esign.pojo.vo.EsignAuthUrlVO;
import com.xbongbong.pro.esign.pojo.vo.EsignCorpStatusVO;

import javax.validation.Valid;
import java.util.Map;

/**
 * @description: 模板中心
 * @Author: hongxiao
 * @date: 2019-03-02 16:51
 * @since v1.0
 */
public interface AppModuleService {
    /**
     * 模板中心：列表
     * @param listDTO 入参
     * @return
     * @throws
     *
     * @author hongxiao
     * @date: 2019-03-02 17:10
     * @since v1.0
     * @version v1.0
     */
    AppModuleListVO list(AppModuleListDTO listDTO) throws XbbException;

    /**
     * 应用搜索
     * @param listDTO
     * @return com.xbongbong.pro.appmodule.pojo.vo.AppModuleListVO
     * @author 石安
     * @date 2020-02-19
     */
    AppModuleListVO search(@Valid AppModuleListDTO listDTO) throws XbbException;

    /**
     * 模板中心：详情
     * @param detailDTO 入参
     * @return
     * @throws
     *
     * @author hongxiao
     * @date: 2019-03-02 17:10
     * @since v1.0
     * @version v1.0
     */
    AppModuleDetailVO detail(AppModuleDetailDTO detailDTO) throws XbbException;

    /**
     * 模板中心：开通应用
     * @param openDTO 入参
     * @return
     * @throws
     *
     * @author hongxiao
     * @date: 2019-03-02 17:11
     * @since v1.0
     * @version v1.0
     */
    AppModuleOpenVO open(AppModuleOpenDTO openDTO) throws XbbException;

    /**
     * 查看应用开通的套餐详情
     * @param appModuleOpenDTO
     * @return com.xbongbong.pro.appmodule.pojo.vo.AppModuleOpenVO
     * @author 石安
     * @date 2019-12-27
     */
    AppModuleOpenVO appOpenDetail(@Valid AppModuleOpenDTO appModuleOpenDTO) throws XbbException;

    /**
     * 开通应用
     * @param appModuleSaveDTO
     * @return com.xbongbong.pro.appmodule.pojo.vo.AppModuleSaveVO
     * @author 石安
     * @date 2019-12-27
     */
    AppModuleSaveVO addMeal(@Valid AppModuleSaveDTO appModuleSaveDTO) throws XbbException;

    /**
     * 发送短信
     * @param sendSMSDTO
     * @return com.xbongbong.pro.appmodule.pojo.vo.AppModuleSaveVO
     * @author 石安
     * @date 2020-01-09
     */
    AppModuleSaveVO sendSMS(@Valid SendSMSDTO sendSMSDTO) throws XbbException;

    /**
     * 申请应用试用或开通
     * @param saveDTO
     * @return com.xbongbong.pro.appmodule.pojo.vo.AppModuleSaveVO
     * @author 石安
     * @date 2020-01-09
     */
    AppModuleSaveVO applyApp(AppModuleSaveDTO saveDTO) throws XbbException;

    AppModuleSaveVO addSalesOpportunity(AppModuleSaveDTO saveDTO) throws XbbException;

    /**
     * 应用到期提醒
     * @param baseDTO
     * @return com.xbongbong.pro.appmodule.pojo.vo.AppRemindVO
     * @author 石安
     * @date 2020-01-09
     */
    AppRemindVO remindExpire(@Valid BaseDTO baseDTO) throws XbbException;

    /**
     * 模板中心：未开通的热门应用
     * @param hotDTO
     * @return
     * @throws XbbException
     */
    AppModuleHotVO hot(@Valid BaseDTO hotDTO) throws XbbException;

    /**
     * 模板中心：个人中心处的列表
     * @param appModuleDisenableListDTO
     * @return
     * @throws XbbException
     */
    AppModuleDisenableListVO disenableList(@Valid BaseDTO appModuleDisenableListDTO) throws XbbException;

    /**
     * 获取企业e签宝微应用状态
     * @param baseDTO
     * @return
     * @throws XbbException
     * 创建时间 2020/6/16 7:44 PM
     * 修改时间 2020/6/16 7:44 PM
     * @author chy
     */
    EsignCorpStatusVO getEsignCorpStatus(BaseDTO baseDTO) throws XbbException;

    /**
     * 获取授权的页面地址
     * @param esignAuthUrlDTO
     * @return
     * @throws XbbException
     * 创建时间 2020/6/16 7:48 PM
     * 修改时间 2020/6/16 7:48 PM
     * @author chy
     */
    EsignAuthUrlVO getEsignAuthUrl(EsignAuthUrlDTO esignAuthUrlDTO) throws XbbException;

    Map<String, PaasAppEntity> getOpenApp(String corpid, String userId) throws XbbException;

}
